/*

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

*/
module derelict.tcod.libtcod;

public
{
    import derelict.tcod.types;
    import derelict.tcod.functions;
}

private
{
    import derelict.util.loader;
    import derelict.util.system;

    static if(Derelict_OS_Windows)
        enum libNames = "libtcod-mingw.dll,libtcod-VS.dll,libtcod.dll";
    else static if(Derelict_OS_Mac)
        enum libNames = "libtcod.dylib";
    else static if(Derelict_OS_Posix)
        enum libNames = "libtcod.so";
    else
        static assert(0, "Need to implement FreeGlut libNames for this operating system.");
}

class DerelictTCODLoader : SharedLibLoader
{
    protected
    {
        override void loadSymbols()
        {
            // bresenham.h
            bindFunc(cast(void**)&TCOD_line_init, "TCOD_line_init");
            bindFunc(cast(void**)&TCOD_line_step, "TCOD_line_step");
            bindFunc(cast(void**)&TCOD_line, "TCOD_line");
            bindFunc(cast(void**)&TCOD_line_init_mt, "TCOD_line_init_mt");
            bindFunc(cast(void**)&TCOD_line_step_mt, "TCOD_line_step_mt");
            bindFunc(cast(void**)&TCOD_line_mt, "TCOD_line_mt");
            // bsp.h
            bindFunc(cast(void**)&TCOD_bsp_new, "TCOD_bsp_new");
            bindFunc(cast(void**)&TCOD_bsp_new_with_size, "TCOD_bsp_new_with_size");
            bindFunc(cast(void**)&TCOD_bsp_delete, "TCOD_bsp_delete");
            bindFunc(cast(void**)&TCOD_bsp_left, "TCOD_bsp_left");
            bindFunc(cast(void**)&TCOD_bsp_right, "TCOD_bsp_right");
            bindFunc(cast(void**)&TCOD_bsp_father, "TCOD_bsp_father");
            bindFunc(cast(void**)&TCOD_bsp_is_leaf, "TCOD_bsp_is_leaf");
            bindFunc(cast(void**)&TCOD_bsp_traverse_pre_order, "TCOD_bsp_traverse_pre_order");
            bindFunc(cast(void**)&TCOD_bsp_traverse_in_order, "TCOD_bsp_traverse_in_order");
            bindFunc(cast(void**)&TCOD_bsp_traverse_post_order, "TCOD_bsp_traverse_post_order");
            bindFunc(cast(void**)&TCOD_bsp_traverse_level_order, "TCOD_bsp_traverse_level_order");
            bindFunc(cast(void**)&TCOD_bsp_traverse_inverted_level_order, "TCOD_bsp_traverse_inverted_level_order");
            bindFunc(cast(void**)&TCOD_bsp_contains, "TCOD_bsp_contains");
            bindFunc(cast(void**)&TCOD_bsp_find_node, "TCOD_bsp_find_node");
            bindFunc(cast(void**)&TCOD_bsp_resize, "TCOD_bsp_resize");
            bindFunc(cast(void**)&TCOD_bsp_split_once, "TCOD_bsp_split_once");
            bindFunc(cast(void**)&TCOD_bsp_split_recursive, "TCOD_bsp_split_recursive");
            bindFunc(cast(void**)&TCOD_bsp_remove_sons, "TCOD_bsp_remove_sons");
            // color.h
            bindFunc(cast(void**)&TCOD_color_RGB, "TCOD_color_RGB");
            bindFunc(cast(void**)&TCOD_color_HSV, "TCOD_color_HSV");
            bindFunc(cast(void**)&TCOD_color_equals, "TCOD_color_equals");
            bindFunc(cast(void**)&TCOD_color_add, "TCOD_color_add");
            bindFunc(cast(void**)&TCOD_color_subtract, "TCOD_color_subtract");
            bindFunc(cast(void**)&TCOD_color_multiply, "TCOD_color_multiply");
            bindFunc(cast(void**)&TCOD_color_multiply_scalar, "TCOD_color_multiply_scalar");
            bindFunc(cast(void**)&TCOD_color_lerp, "TCOD_color_lerp");
            bindFunc(cast(void**)&TCOD_color_set_HSV, "TCOD_color_set_HSV");
            bindFunc(cast(void**)&TCOD_color_get_HSV, "TCOD_color_get_HSV");
            bindFunc(cast(void**)&TCOD_color_get_hue, "TCOD_color_get_hue");
            bindFunc(cast(void**)&TCOD_color_set_hue, "TCOD_color_set_hue");
            bindFunc(cast(void**)&TCOD_color_get_saturation, "TCOD_color_get_saturation");
            bindFunc(cast(void**)&TCOD_color_set_saturation, "TCOD_color_set_saturation");
            bindFunc(cast(void**)&TCOD_color_get_value, "TCOD_color_get_value");
            bindFunc(cast(void**)&TCOD_color_set_value, "TCOD_color_set_value");
            bindFunc(cast(void**)&TCOD_color_shift_hue, "TCOD_color_shift_hue");
            bindFunc(cast(void**)&TCOD_color_scale_HSV, "TCOD_color_scale_HSV");
            bindFunc(cast(void**)&TCOD_color_gen_map, "TCOD_color_gen_map");
            bindFunc(cast(void**)&TCOD_black, "TCOD_black");
            bindFunc(cast(void**)&TCOD_darkest_grey, "TCOD_darkest_grey");
            bindFunc(cast(void**)&TCOD_darker_grey, "TCOD_darker_grey");
            bindFunc(cast(void**)&TCOD_dark_grey, "TCOD_dark_grey");
            bindFunc(cast(void**)&TCOD_grey, "TCOD_grey");
            bindFunc(cast(void**)&TCOD_light_grey, "TCOD_light_grey");
            bindFunc(cast(void**)&TCOD_lighter_grey, "TCOD_lighter_grey");
            bindFunc(cast(void**)&TCOD_lightest_grey, "TCOD_lightest_grey");
            bindFunc(cast(void**)&TCOD_darkest_gray, "TCOD_darkest_gray");
            bindFunc(cast(void**)&TCOD_darker_gray, "TCOD_darker_gray");
            bindFunc(cast(void**)&TCOD_dark_gray, "TCOD_dark_gray");
            bindFunc(cast(void**)&TCOD_gray, "TCOD_gray");
            bindFunc(cast(void**)&TCOD_light_gray, "TCOD_light_gray");
            bindFunc(cast(void**)&TCOD_lighter_gray, "TCOD_lighter_gray");
            bindFunc(cast(void**)&TCOD_lightest_gray, "TCOD_lightest_gray");
            bindFunc(cast(void**)&TCOD_white, "TCOD_white");
            bindFunc(cast(void**)&TCOD_darkest_sepia, "TCOD_darkest_sepia");
            bindFunc(cast(void**)&TCOD_darker_sepia, "TCOD_darker_sepia");
            bindFunc(cast(void**)&TCOD_dark_sepia, "TCOD_dark_sepia");
            bindFunc(cast(void**)&TCOD_sepia, "TCOD_sepia");
            bindFunc(cast(void**)&TCOD_light_sepia, "TCOD_light_sepia");
            bindFunc(cast(void**)&TCOD_lighter_sepia, "TCOD_lighter_sepia");
            bindFunc(cast(void**)&TCOD_lightest_sepia, "TCOD_lightest_sepia");
            bindFunc(cast(void**)&TCOD_red, "TCOD_red");
            bindFunc(cast(void**)&TCOD_flame, "TCOD_flame");
            bindFunc(cast(void**)&TCOD_orange, "TCOD_orange");
            bindFunc(cast(void**)&TCOD_amber, "TCOD_amber");
            bindFunc(cast(void**)&TCOD_yellow, "TCOD_yellow");
            bindFunc(cast(void**)&TCOD_lime, "TCOD_lime");
            bindFunc(cast(void**)&TCOD_chartreuse, "TCOD_chartreuse");
            bindFunc(cast(void**)&TCOD_green, "TCOD_green");
            bindFunc(cast(void**)&TCOD_sea, "TCOD_sea");
            bindFunc(cast(void**)&TCOD_turquoise, "TCOD_turquoise");
            bindFunc(cast(void**)&TCOD_cyan, "TCOD_cyan");
            bindFunc(cast(void**)&TCOD_sky, "TCOD_sky");
            bindFunc(cast(void**)&TCOD_azure, "TCOD_azure");
            bindFunc(cast(void**)&TCOD_blue, "TCOD_blue");
            bindFunc(cast(void**)&TCOD_han, "TCOD_han");
            bindFunc(cast(void**)&TCOD_violet, "TCOD_violet");
            bindFunc(cast(void**)&TCOD_purple, "TCOD_purple");
            bindFunc(cast(void**)&TCOD_fuchsia, "TCOD_fuchsia");
            bindFunc(cast(void**)&TCOD_magenta, "TCOD_magenta");
            bindFunc(cast(void**)&TCOD_pink, "TCOD_pink");
            bindFunc(cast(void**)&TCOD_crimson, "TCOD_crimson");
            bindFunc(cast(void**)&TCOD_dark_red, "TCOD_dark_red");
            bindFunc(cast(void**)&TCOD_dark_flame, "TCOD_dark_flame");
            bindFunc(cast(void**)&TCOD_dark_orange, "TCOD_dark_orange");
            bindFunc(cast(void**)&TCOD_dark_amber, "TCOD_dark_amber");
            bindFunc(cast(void**)&TCOD_dark_yellow, "TCOD_dark_yellow");
            bindFunc(cast(void**)&TCOD_dark_lime, "TCOD_dark_lime");
            bindFunc(cast(void**)&TCOD_dark_chartreuse, "TCOD_dark_chartreuse");
            bindFunc(cast(void**)&TCOD_dark_green, "TCOD_dark_green");
            bindFunc(cast(void**)&TCOD_dark_sea, "TCOD_dark_sea");
            bindFunc(cast(void**)&TCOD_dark_turquoise, "TCOD_dark_turquoise");
            bindFunc(cast(void**)&TCOD_dark_cyan, "TCOD_dark_cyan");
            bindFunc(cast(void**)&TCOD_dark_sky, "TCOD_dark_sky");
            bindFunc(cast(void**)&TCOD_dark_azure, "TCOD_dark_azure");
            bindFunc(cast(void**)&TCOD_dark_blue, "TCOD_dark_blue");
            bindFunc(cast(void**)&TCOD_dark_han, "TCOD_dark_han");
            bindFunc(cast(void**)&TCOD_dark_violet, "TCOD_dark_violet");
            bindFunc(cast(void**)&TCOD_dark_purple, "TCOD_dark_purple");
            bindFunc(cast(void**)&TCOD_dark_fuchsia, "TCOD_dark_fuchsia");
            bindFunc(cast(void**)&TCOD_dark_magenta, "TCOD_dark_magenta");
            bindFunc(cast(void**)&TCOD_dark_pink, "TCOD_dark_pink");
            bindFunc(cast(void**)&TCOD_dark_crimson, "TCOD_dark_crimson");
            bindFunc(cast(void**)&TCOD_darker_red, "TCOD_darker_red");
            bindFunc(cast(void**)&TCOD_darker_flame, "TCOD_darker_flame");
            bindFunc(cast(void**)&TCOD_darker_orange, "TCOD_darker_orange");
            bindFunc(cast(void**)&TCOD_darker_amber, "TCOD_darker_amber");
            bindFunc(cast(void**)&TCOD_darker_yellow, "TCOD_darker_yellow");
            bindFunc(cast(void**)&TCOD_darker_lime, "TCOD_darker_lime");
            bindFunc(cast(void**)&TCOD_darker_chartreuse, "TCOD_darker_chartreuse");
            bindFunc(cast(void**)&TCOD_darker_green, "TCOD_darker_green");
            bindFunc(cast(void**)&TCOD_darker_sea, "TCOD_darker_sea");
            bindFunc(cast(void**)&TCOD_darker_turquoise, "TCOD_darker_turquoise");
            bindFunc(cast(void**)&TCOD_darker_cyan, "TCOD_darker_cyan");
            bindFunc(cast(void**)&TCOD_darker_sky, "TCOD_darker_sky");
            bindFunc(cast(void**)&TCOD_darker_azure, "TCOD_darker_azure");
            bindFunc(cast(void**)&TCOD_darker_blue, "TCOD_darker_blue");
            bindFunc(cast(void**)&TCOD_darker_han, "TCOD_darker_han");
            bindFunc(cast(void**)&TCOD_darker_violet, "TCOD_darker_violet");
            bindFunc(cast(void**)&TCOD_darker_purple, "TCOD_darker_purple");
            bindFunc(cast(void**)&TCOD_darker_fuchsia, "TCOD_darker_fuchsia");
            bindFunc(cast(void**)&TCOD_darker_magenta, "TCOD_darker_magenta");
            bindFunc(cast(void**)&TCOD_darker_pink, "TCOD_darker_pink");
            bindFunc(cast(void**)&TCOD_darker_crimson, "TCOD_darker_crimson");
            bindFunc(cast(void**)&TCOD_darkest_red, "TCOD_darkest_red");
            bindFunc(cast(void**)&TCOD_darkest_flame, "TCOD_darkest_flame");
            bindFunc(cast(void**)&TCOD_darkest_orange, "TCOD_darkest_orange");
            bindFunc(cast(void**)&TCOD_darkest_amber, "TCOD_darkest_amber");
            bindFunc(cast(void**)&TCOD_darkest_yellow, "TCOD_darkest_yellow");
            bindFunc(cast(void**)&TCOD_darkest_lime, "TCOD_darkest_lime");
            bindFunc(cast(void**)&TCOD_darkest_chartreuse, "TCOD_darkest_chartreuse");
            bindFunc(cast(void**)&TCOD_darkest_green, "TCOD_darkest_green");
            bindFunc(cast(void**)&TCOD_darkest_sea, "TCOD_darkest_sea");
            bindFunc(cast(void**)&TCOD_darkest_turquoise, "TCOD_darkest_turquoise");
            bindFunc(cast(void**)&TCOD_darkest_cyan, "TCOD_darkest_cyan");
            bindFunc(cast(void**)&TCOD_darkest_sky, "TCOD_darkest_sky");
            bindFunc(cast(void**)&TCOD_darkest_azure, "TCOD_darkest_azure");
            bindFunc(cast(void**)&TCOD_darkest_blue, "TCOD_darkest_blue");
            bindFunc(cast(void**)&TCOD_darkest_han, "TCOD_darkest_han");
            bindFunc(cast(void**)&TCOD_darkest_violet, "TCOD_darkest_violet");
            bindFunc(cast(void**)&TCOD_darkest_purple, "TCOD_darkest_purple");
            bindFunc(cast(void**)&TCOD_darkest_fuchsia, "TCOD_darkest_fuchsia");
            bindFunc(cast(void**)&TCOD_darkest_magenta, "TCOD_darkest_magenta");
            bindFunc(cast(void**)&TCOD_darkest_pink, "TCOD_darkest_pink");
            bindFunc(cast(void**)&TCOD_darkest_crimson, "TCOD_darkest_crimson");
            bindFunc(cast(void**)&TCOD_light_red, "TCOD_light_red");
            bindFunc(cast(void**)&TCOD_light_flame, "TCOD_light_flame");
            bindFunc(cast(void**)&TCOD_light_orange, "TCOD_light_orange");
            bindFunc(cast(void**)&TCOD_light_amber, "TCOD_light_amber");
            bindFunc(cast(void**)&TCOD_light_yellow, "TCOD_light_yellow");
            bindFunc(cast(void**)&TCOD_light_lime, "TCOD_light_lime");
            bindFunc(cast(void**)&TCOD_light_chartreuse, "TCOD_light_chartreuse");
            bindFunc(cast(void**)&TCOD_light_green, "TCOD_light_green");
            bindFunc(cast(void**)&TCOD_light_sea, "TCOD_light_sea");
            bindFunc(cast(void**)&TCOD_light_turquoise, "TCOD_light_turquoise");
            bindFunc(cast(void**)&TCOD_light_cyan, "TCOD_light_cyan");
            bindFunc(cast(void**)&TCOD_light_sky, "TCOD_light_sky");
            bindFunc(cast(void**)&TCOD_light_azure, "TCOD_light_azure");
            bindFunc(cast(void**)&TCOD_light_blue, "TCOD_light_blue");
            bindFunc(cast(void**)&TCOD_light_han, "TCOD_light_han");
            bindFunc(cast(void**)&TCOD_light_violet, "TCOD_light_violet");
            bindFunc(cast(void**)&TCOD_light_purple, "TCOD_light_purple");
            bindFunc(cast(void**)&TCOD_light_fuchsia, "TCOD_light_fuchsia");
            bindFunc(cast(void**)&TCOD_light_magenta, "TCOD_light_magenta");
            bindFunc(cast(void**)&TCOD_light_pink, "TCOD_light_pink");
            bindFunc(cast(void**)&TCOD_light_crimson, "TCOD_light_crimson");
            bindFunc(cast(void**)&TCOD_lighter_red, "TCOD_lighter_red");
            bindFunc(cast(void**)&TCOD_lighter_flame, "TCOD_lighter_flame");
            bindFunc(cast(void**)&TCOD_lighter_orange, "TCOD_lighter_orange");
            bindFunc(cast(void**)&TCOD_lighter_amber, "TCOD_lighter_amber");
            bindFunc(cast(void**)&TCOD_lighter_yellow, "TCOD_lighter_yellow");
            bindFunc(cast(void**)&TCOD_lighter_lime, "TCOD_lighter_lime");
            bindFunc(cast(void**)&TCOD_lighter_chartreuse, "TCOD_lighter_chartreuse");
            bindFunc(cast(void**)&TCOD_lighter_green, "TCOD_lighter_green");
            bindFunc(cast(void**)&TCOD_lighter_sea, "TCOD_lighter_sea");
            bindFunc(cast(void**)&TCOD_lighter_turquoise, "TCOD_lighter_turquoise");
            bindFunc(cast(void**)&TCOD_lighter_cyan, "TCOD_lighter_cyan");
            bindFunc(cast(void**)&TCOD_lighter_sky, "TCOD_lighter_sky");
            bindFunc(cast(void**)&TCOD_lighter_azure, "TCOD_lighter_azure");
            bindFunc(cast(void**)&TCOD_lighter_blue, "TCOD_lighter_blue");
            bindFunc(cast(void**)&TCOD_lighter_han, "TCOD_lighter_han");
            bindFunc(cast(void**)&TCOD_lighter_violet, "TCOD_lighter_violet");
            bindFunc(cast(void**)&TCOD_lighter_purple, "TCOD_lighter_purple");
            bindFunc(cast(void**)&TCOD_lighter_fuchsia, "TCOD_lighter_fuchsia");
            bindFunc(cast(void**)&TCOD_lighter_magenta, "TCOD_lighter_magenta");
            bindFunc(cast(void**)&TCOD_lighter_pink, "TCOD_lighter_pink");
            bindFunc(cast(void**)&TCOD_lighter_crimson, "TCOD_lighter_crimson");
            bindFunc(cast(void**)&TCOD_lightest_red, "TCOD_lightest_red");
            bindFunc(cast(void**)&TCOD_lightest_flame, "TCOD_lightest_flame");
            bindFunc(cast(void**)&TCOD_lightest_orange, "TCOD_lightest_orange");
            bindFunc(cast(void**)&TCOD_lightest_amber, "TCOD_lightest_amber");
            bindFunc(cast(void**)&TCOD_lightest_yellow, "TCOD_lightest_yellow");
            bindFunc(cast(void**)&TCOD_lightest_lime, "TCOD_lightest_lime");
            bindFunc(cast(void**)&TCOD_lightest_chartreuse, "TCOD_lightest_chartreuse");
            bindFunc(cast(void**)&TCOD_lightest_green, "TCOD_lightest_green");
            bindFunc(cast(void**)&TCOD_lightest_sea, "TCOD_lightest_sea");
            bindFunc(cast(void**)&TCOD_lightest_turquoise, "TCOD_lightest_turquoise");
            bindFunc(cast(void**)&TCOD_lightest_cyan, "TCOD_lightest_cyan");
            bindFunc(cast(void**)&TCOD_lightest_sky, "TCOD_lightest_sky");
            bindFunc(cast(void**)&TCOD_lightest_azure, "TCOD_lightest_azure");
            bindFunc(cast(void**)&TCOD_lightest_blue, "TCOD_lightest_blue");
            bindFunc(cast(void**)&TCOD_lightest_han, "TCOD_lightest_han");
            bindFunc(cast(void**)&TCOD_lightest_violet, "TCOD_lightest_violet");
            bindFunc(cast(void**)&TCOD_lightest_purple, "TCOD_lightest_purple");
            bindFunc(cast(void**)&TCOD_lightest_fuchsia, "TCOD_lightest_fuchsia");
            bindFunc(cast(void**)&TCOD_lightest_magenta, "TCOD_lightest_magenta");
            bindFunc(cast(void**)&TCOD_lightest_pink, "TCOD_lightest_pink");
            bindFunc(cast(void**)&TCOD_lightest_crimson, "TCOD_lightest_crimson");
            bindFunc(cast(void**)&TCOD_desaturated_red, "TCOD_desaturated_red");
            bindFunc(cast(void**)&TCOD_desaturated_flame, "TCOD_desaturated_flame");
            bindFunc(cast(void**)&TCOD_desaturated_orange, "TCOD_desaturated_orange");
            bindFunc(cast(void**)&TCOD_desaturated_amber, "TCOD_desaturated_amber");
            bindFunc(cast(void**)&TCOD_desaturated_yellow, "TCOD_desaturated_yellow");
            bindFunc(cast(void**)&TCOD_desaturated_lime, "TCOD_desaturated_lime");
            bindFunc(cast(void**)&TCOD_desaturated_chartreuse, "TCOD_desaturated_chartreuse");
            bindFunc(cast(void**)&TCOD_desaturated_green, "TCOD_desaturated_green");
            bindFunc(cast(void**)&TCOD_desaturated_sea, "TCOD_desaturated_sea");
            bindFunc(cast(void**)&TCOD_desaturated_turquoise, "TCOD_desaturated_turquoise");
            bindFunc(cast(void**)&TCOD_desaturated_cyan, "TCOD_desaturated_cyan");
            bindFunc(cast(void**)&TCOD_desaturated_sky, "TCOD_desaturated_sky");
            bindFunc(cast(void**)&TCOD_desaturated_azure, "TCOD_desaturated_azure");
            bindFunc(cast(void**)&TCOD_desaturated_blue, "TCOD_desaturated_blue");
            bindFunc(cast(void**)&TCOD_desaturated_han, "TCOD_desaturated_han");
            bindFunc(cast(void**)&TCOD_desaturated_violet, "TCOD_desaturated_violet");
            bindFunc(cast(void**)&TCOD_desaturated_purple, "TCOD_desaturated_purple");
            bindFunc(cast(void**)&TCOD_desaturated_fuchsia, "TCOD_desaturated_fuchsia");
            bindFunc(cast(void**)&TCOD_desaturated_magenta, "TCOD_desaturated_magenta");
            bindFunc(cast(void**)&TCOD_desaturated_pink, "TCOD_desaturated_pink");
            bindFunc(cast(void**)&TCOD_desaturated_crimson, "TCOD_desaturated_crimson");
            bindFunc(cast(void**)&TCOD_brass, "TCOD_brass");
            bindFunc(cast(void**)&TCOD_copper, "TCOD_copper");
            bindFunc(cast(void**)&TCOD_gold, "TCOD_gold");
            bindFunc(cast(void**)&TCOD_silver, "TCOD_silver");
            bindFunc(cast(void**)&TCOD_celadon, "TCOD_celadon");
            bindFunc(cast(void**)&TCOD_peach, "TCOD_peach");
            // console.h
            bindFunc(cast(void**)&TCOD_console_init_root, "TCOD_console_init_root");
            bindFunc(cast(void**)&TCOD_console_set_window_title, "TCOD_console_set_window_title");
            bindFunc(cast(void**)&TCOD_console_set_fullscreen, "TCOD_console_set_fullscreen");
            bindFunc(cast(void**)&TCOD_console_is_fullscreen, "TCOD_console_is_fullscreen");
            bindFunc(cast(void**)&TCOD_console_is_window_closed, "TCOD_console_is_window_closed");
            bindFunc(cast(void**)&TCOD_console_set_custom_font, "TCOD_console_set_custom_font");
            bindFunc(cast(void**)&TCOD_console_map_ascii_code_to_font, "TCOD_console_map_ascii_code_to_font");
            bindFunc(cast(void**)&TCOD_console_map_ascii_codes_to_font, "TCOD_console_map_ascii_codes_to_font");
            bindFunc(cast(void**)&TCOD_console_map_string_to_font, "TCOD_console_map_string_to_font");
            bindFunc(cast(void**)&TCOD_console_set_dirty, "TCOD_console_set_dirty");
            bindFunc(cast(void**)&TCOD_console_set_default_background, "TCOD_console_set_default_background");
            bindFunc(cast(void**)&TCOD_console_set_default_foreground, "TCOD_console_set_default_foreground");
            bindFunc(cast(void**)&TCOD_console_clear, "TCOD_console_clear");
            bindFunc(cast(void**)&TCOD_console_set_char_background, "TCOD_console_set_char_background");
            bindFunc(cast(void**)&TCOD_console_set_char_foreground, "TCOD_console_set_char_foreground");
            bindFunc(cast(void**)&TCOD_console_set_char, "TCOD_console_set_char");
            bindFunc(cast(void**)&TCOD_console_put_char, "TCOD_console_put_char");
            bindFunc(cast(void**)&TCOD_console_put_char_ex, "TCOD_console_put_char_ex");
            bindFunc(cast(void**)&TCOD_console_set_background_flag, "TCOD_console_set_background_flag");
            bindFunc(cast(void**)&TCOD_console_get_background_flag, "TCOD_console_get_background_flag");
            bindFunc(cast(void**)&TCOD_console_set_alignment, "TCOD_console_set_alignment");
            bindFunc(cast(void**)&TCOD_console_get_alignment, "TCOD_console_get_alignment");
            bindFunc(cast(void**)&TCOD_console_print, "TCOD_console_print");
            bindFunc(cast(void**)&TCOD_console_print_ex, "TCOD_console_print_ex");
            bindFunc(cast(void**)&TCOD_console_print_rect, "TCOD_console_print_rect");
            bindFunc(cast(void**)&TCOD_console_print_rect_ex, "TCOD_console_print_rect_ex");
            bindFunc(cast(void**)&TCOD_console_get_height_rect, "TCOD_console_get_height_rect");
            bindFunc(cast(void**)&TCOD_console_rect, "TCOD_console_rect");
            bindFunc(cast(void**)&TCOD_console_hline, "TCOD_console_hline");
            bindFunc(cast(void**)&TCOD_console_vline, "TCOD_console_vline");
            bindFunc(cast(void**)&TCOD_console_print_frame, "TCOD_console_print_frame");
            static if(!noUnicode)
            {
                  bindFunc(cast(void**)&TCOD_console_map_string_to_font_utf, "TCOD_console_map_string_to_font_utf");
                  bindFunc(cast(void**)&TCOD_console_print_utf, "TCOD_console_print_utf");
                  bindFunc(cast(void**)&TCOD_console_print_ex_utf, "TCOD_console_print_ex_utf");
                  bindFunc(cast(void**)&TCOD_console_print_rect_utf, "TCOD_console_print_rect_utf");
                  bindFunc(cast(void**)&TCOD_console_print_rect_ex_utf, "TCOD_console_print_rect_ex_utf");
                  bindFunc(cast(void**)&TCOD_console_get_height_rect_utf, "TCOD_console_get_height_rect_utf");
            }
            bindFunc(cast(void**)&TCOD_console_get_default_background, "TCOD_console_get_default_background");
            bindFunc(cast(void**)&TCOD_console_get_default_foreground, "TCOD_console_get_default_foreground");
            bindFunc(cast(void**)&TCOD_console_get_char_background, "TCOD_console_get_char_background");
            bindFunc(cast(void**)&TCOD_console_get_char_foreground, "TCOD_console_get_char_foreground");
            bindFunc(cast(void**)&TCOD_console_get_char, "TCOD_console_get_char");
            bindFunc(cast(void**)&TCOD_console_set_fade, "TCOD_console_set_fade");
            bindFunc(cast(void**)&TCOD_console_get_fade, "TCOD_console_get_fade");
            bindFunc(cast(void**)&TCOD_console_get_fading_color, "TCOD_console_get_fading_color");
            bindFunc(cast(void**)&TCOD_console_flush, "TCOD_console_flush");
            bindFunc(cast(void**)&TCOD_console_set_color_control, "TCOD_console_set_color_control");
            bindFunc(cast(void**)&TCOD_console_check_for_keypress, "TCOD_console_check_for_keypress");
            bindFunc(cast(void**)&TCOD_console_wait_for_keypress, "TCOD_console_wait_for_keypress");
            bindFunc(cast(void**)&TCOD_console_set_keyboard_repeat, "TCOD_console_set_keyboard_repeat");
            bindFunc(cast(void**)&TCOD_console_disable_keyboard_repeat, "TCOD_console_disable_keyboard_repeat");
            bindFunc(cast(void**)&TCOD_console_is_key_pressed, "TCOD_console_is_key_pressed");
            bindFunc(cast(void**)&TCOD_console_from_file, "TCOD_console_from_file");
            bindFunc(cast(void**)&TCOD_console_load_asc, "TCOD_console_load_asc");
            bindFunc(cast(void**)&TCOD_console_load_apf, "TCOD_console_load_apf");
            bindFunc(cast(void**)&TCOD_console_save_asc, "TCOD_console_save_asc");
            bindFunc(cast(void**)&TCOD_console_save_apf, "TCOD_console_save_apf");
            bindFunc(cast(void**)&TCOD_console_new, "TCOD_console_new");
            bindFunc(cast(void**)&TCOD_console_get_width, "TCOD_console_get_width");
            bindFunc(cast(void**)&TCOD_console_get_height, "TCOD_console_get_height");
            bindFunc(cast(void**)&TCOD_console_set_key_color, "TCOD_console_set_key_color");
            bindFunc(cast(void**)&TCOD_console_blit, "TCOD_console_blit");
            bindFunc(cast(void**)&TCOD_console_delete, "TCOD_console_delete");
            bindFunc(cast(void**)&TCOD_console_credits, "TCOD_console_credits");
            bindFunc(cast(void**)&TCOD_console_credits_reset, "TCOD_console_credits_reset");
            bindFunc(cast(void**)&TCOD_console_credits_render, "TCOD_console_credits_render");
            // fov.h
            bindFunc(cast(void**)&TCOD_map_new, "TCOD_map_new");
            bindFunc(cast(void**)&TCOD_map_clear, "TCOD_map_clear");
            bindFunc(cast(void**)&TCOD_map_copy, "TCOD_map_copy");
            bindFunc(cast(void**)&TCOD_map_set_properties, "TCOD_map_set_properties");
            bindFunc(cast(void**)&TCOD_map_delete, "TCOD_map_delete");
            bindFunc(cast(void**)&TCOD_map_compute_fov, "TCOD_map_compute_fov");
            bindFunc(cast(void**)&TCOD_map_is_in_fov, "TCOD_map_is_in_fov");
            bindFunc(cast(void**)&TCOD_map_set_in_fov, "TCOD_map_set_in_fov");
            bindFunc(cast(void**)&TCOD_map_is_transparent, "TCOD_map_is_transparent");
            bindFunc(cast(void**)&TCOD_map_is_walkable, "TCOD_map_is_walkable");
            bindFunc(cast(void**)&TCOD_map_get_width, "TCOD_map_get_width");
            bindFunc(cast(void**)&TCOD_map_get_height, "TCOD_map_get_height");
            bindFunc(cast(void**)&TCOD_map_get_nb_cells, "TCOD_map_get_nb_cells");
            // heightmap.h
            bindFunc(cast(void**)&TCOD_heightmap_new, "TCOD_heightmap_new");
            bindFunc(cast(void**)&TCOD_heightmap_delete, "TCOD_heightmap_delete");
            bindFunc(cast(void**)&TCOD_heightmap_get_value, "TCOD_heightmap_get_value");
            bindFunc(cast(void**)&TCOD_heightmap_get_interpolated_value, "TCOD_heightmap_get_interpolated_value");
            bindFunc(cast(void**)&TCOD_heightmap_set_value, "TCOD_heightmap_set_value");
            bindFunc(cast(void**)&TCOD_heightmap_get_slope, "TCOD_heightmap_get_slope");
            bindFunc(cast(void**)&TCOD_heightmap_get_normal, "TCOD_heightmap_get_normal");
            bindFunc(cast(void**)&TCOD_heightmap_count_cells, "TCOD_heightmap_count_cells");
            bindFunc(cast(void**)&TCOD_heightmap_has_land_on_border, "TCOD_heightmap_has_land_on_border");
            bindFunc(cast(void**)&TCOD_heightmap_get_minmax, "TCOD_heightmap_get_minmax");
            bindFunc(cast(void**)&TCOD_heightmap_copy, "TCOD_heightmap_copy");
            bindFunc(cast(void**)&TCOD_heightmap_add, "TCOD_heightmap_add");
            bindFunc(cast(void**)&TCOD_heightmap_scale, "TCOD_heightmap_scale");
            bindFunc(cast(void**)&TCOD_heightmap_clamp, "TCOD_heightmap_clamp");
            bindFunc(cast(void**)&TCOD_heightmap_normalize, "TCOD_heightmap_normalize");
            bindFunc(cast(void**)&TCOD_heightmap_clear, "TCOD_heightmap_clear");
            bindFunc(cast(void**)&TCOD_heightmap_lerp_hm, "TCOD_heightmap_lerp_hm");
            bindFunc(cast(void**)&TCOD_heightmap_add_hm, "TCOD_heightmap_add_hm");
            bindFunc(cast(void**)&TCOD_heightmap_multiply_hm, "TCOD_heightmap_multiply_hm");
            bindFunc(cast(void**)&TCOD_heightmap_add_hill, "TCOD_heightmap_add_hill");
            bindFunc(cast(void**)&TCOD_heightmap_dig_hill, "TCOD_heightmap_dig_hill");
            bindFunc(cast(void**)&TCOD_heightmap_dig_bezier, "TCOD_heightmap_dig_bezier");
            bindFunc(cast(void**)&TCOD_heightmap_rain_erosion, "TCOD_heightmap_rain_erosion");
            bindFunc(cast(void**)&TCOD_heightmap_kernel_transform, "TCOD_heightmap_kernel_transform");
            bindFunc(cast(void**)&TCOD_heightmap_add_voronoi, "TCOD_heightmap_add_voronoi");
            bindFunc(cast(void**)&TCOD_heightmap_add_fbm, "TCOD_heightmap_add_fbm");
            bindFunc(cast(void**)&TCOD_heightmap_scale_fbm, "TCOD_heightmap_scale_fbm");
            bindFunc(cast(void**)&TCOD_heightmap_islandify, "TCOD_heightmap_islandify");
            // image.h
            bindFunc(cast(void**)&TCOD_image_new, "TCOD_image_new");
            bindFunc(cast(void**)&TCOD_image_from_console, "TCOD_image_from_console");
            bindFunc(cast(void**)&TCOD_image_refresh_console, "TCOD_image_refresh_console");
            bindFunc(cast(void**)&TCOD_image_load, "TCOD_image_load");
            bindFunc(cast(void**)&TCOD_desaturated_crimson, "TCOD_desaturated_crimson");
            bindFunc(cast(void**)&TCOD_image_clear, "TCOD_image_clear");
            bindFunc(cast(void**)&TCOD_image_invert, "TCOD_image_invert");
            bindFunc(cast(void**)&TCOD_image_hflip, "TCOD_image_hflip");
            bindFunc(cast(void**)&TCOD_image_rotate90, "TCOD_image_rotate90");
            bindFunc(cast(void**)&TCOD_image_vflip, "TCOD_image_vflip");
            bindFunc(cast(void**)&TCOD_image_scale, "TCOD_image_scale");
            bindFunc(cast(void**)&TCOD_image_save, "TCOD_image_save");
            bindFunc(cast(void**)&TCOD_image_get_size, "TCOD_image_get_size");
            bindFunc(cast(void**)&TCOD_image_get_pixel, "TCOD_image_get_pixel");
            bindFunc(cast(void**)&TCOD_image_get_alpha, "TCOD_image_get_alpha");
            bindFunc(cast(void**)&TCOD_image_get_mipmap_pixel, "TCOD_image_get_mipmap_pixel");
            bindFunc(cast(void**)&TCOD_image_put_pixel, "TCOD_image_put_pixel");
            bindFunc(cast(void**)&TCOD_image_blit, "TCOD_image_blit");
            bindFunc(cast(void**)&TCOD_desaturated_crimson, "TCOD_desaturated_crimson");
            bindFunc(cast(void**)&TCOD_image_blit_rect, "TCOD_image_blit_rect");
            bindFunc(cast(void**)&TCOD_image_blit_2x, "TCOD_image_blit_2x");
            bindFunc(cast(void**)&TCOD_image_delete, "TCOD_image_delete");
            bindFunc(cast(void**)&TCOD_image_set_key_color, "TCOD_image_set_key_color");
            bindFunc(cast(void**)&TCOD_image_is_pixel_transparent, "TCOD_image_is_pixel_transparent");
            // list.h
            bindFunc(cast(void**)&TCOD_list_new, "TCOD_list_new");
            bindFunc(cast(void**)&TCOD_list_allocate, "TCOD_list_allocate");
            bindFunc(cast(void**)&TCOD_list_duplicate, "TCOD_list_duplicate");
            bindFunc(cast(void**)&TCOD_list_delete, "TCOD_list_delete");
            bindFunc(cast(void**)&TCOD_list_push, "TCOD_list_push");
            bindFunc(cast(void**)&TCOD_list_pop, "TCOD_list_pop");
            bindFunc(cast(void**)&TCOD_list_peek, "TCOD_list_peek");
            bindFunc(cast(void**)&TCOD_list_add_all, "TCOD_list_add_all");
            bindFunc(cast(void**)&TCOD_list_get, "TCOD_list_get");
            bindFunc(cast(void**)&TCOD_list_set, "TCOD_list_set");
            bindFunc(cast(void**)&TCOD_list_begin, "TCOD_list_begin");
            bindFunc(cast(void**)&TCOD_list_end, "TCOD_list_end");
            bindFunc(cast(void**)&TCOD_list_reverse, "TCOD_list_reverse");
            bindFunc(cast(void**)&TCOD_list_remove_iterator, "TCOD_list_remove_iterator");
            bindFunc(cast(void**)&TCOD_list_remove, "TCOD_list_remove");
            bindFunc(cast(void**)&TCOD_list_remove_iterator_fast, "TCOD_list_remove_iterator_fast");
            bindFunc(cast(void**)&TCOD_list_remove_fast, "TCOD_list_remove_fast");
            bindFunc(cast(void**)&TCOD_list_contains, "TCOD_list_contains");
            bindFunc(cast(void**)&TCOD_list_clear, "TCOD_list_clear");
            bindFunc(cast(void**)&TCOD_list_clear_and_delete, "TCOD_list_clear_and_delete");
            bindFunc(cast(void**)&TCOD_list_size, "TCOD_list_size");
            bindFunc(cast(void**)&TCOD_list_insert_before, "TCOD_list_insert_before");
            bindFunc(cast(void**)&TCOD_list_is_empty, "TCOD_list_is_empty");
            // mersenne.h
            bindFunc(cast(void**)&TCOD_random_get_instance, "TCOD_random_get_instance");
            bindFunc(cast(void**)&TCOD_random_new, "TCOD_random_new");
            bindFunc(cast(void**)&TCOD_random_save, "TCOD_random_save");
            bindFunc(cast(void**)&TCOD_random_restore, "TCOD_random_restore");
            bindFunc(cast(void**)&TCOD_random_new_from_seed, "TCOD_random_new_from_seed");
            bindFunc(cast(void**)&TCOD_random_delete, "TCOD_random_delete");
            bindFunc(cast(void**)&TCOD_random_set_distribution, "TCOD_random_set_distribution");
            bindFunc(cast(void**)&TCOD_random_get_int, "TCOD_random_get_int");
            bindFunc(cast(void**)&TCOD_random_get_float, "TCOD_random_get_float");
            bindFunc(cast(void**)&TCOD_random_get_double, "TCOD_random_get_double");
            bindFunc(cast(void**)&TCOD_random_get_int_mean, "TCOD_random_get_int_mean");
            bindFunc(cast(void**)&TCOD_random_get_float_mean, "TCOD_random_get_float_mean");
            bindFunc(cast(void**)&TCOD_random_get_double_mean, "TCOD_random_get_double_mean");
            bindFunc(cast(void**)&TCOD_random_dice_new, "TCOD_random_dice_new");
            bindFunc(cast(void**)&TCOD_random_dice_roll, "TCOD_random_dice_roll");
            bindFunc(cast(void**)&TCOD_random_dice_roll_s, "TCOD_random_dice_roll_s");
            // mouse.h
            bindFunc(cast(void**)&TCOD_mouse_show_cursor, "TCOD_mouse_show_cursor");
            bindFunc(cast(void**)&TCOD_mouse_get_status, "TCOD_mouse_get_status");
            bindFunc(cast(void**)&TCOD_mouse_is_cursor_visible, "TCOD_mouse_is_cursor_visible");
            bindFunc(cast(void**)&TCOD_mouse_move, "TCOD_mouse_move");
            //bindFunc(cast(void**)&TCOD_mouse_includes_touch, "TCOD_mouse_includes_touch");
            // namegen.h
            bindFunc(cast(void**)&TCOD_namegen_parse, "TCOD_namegen_parse");
            bindFunc(cast(void**)&TCOD_namegen_generate, "TCOD_namegen_generate");
            bindFunc(cast(void**)&TCOD_namegen_generate_custom, "TCOD_namegen_generate_custom");
            bindFunc(cast(void**)&TCOD_namegen_get_sets, "TCOD_namegen_get_sets");
            bindFunc(cast(void**)&TCOD_namegen_destroy, "TCOD_namegen_destroy");
            // noise.h
            bindFunc(cast(void**)&TCOD_noise_new, "TCOD_noise_new");
            bindFunc(cast(void**)&TCOD_noise_set_type, "TCOD_noise_set_type");
            bindFunc(cast(void**)&TCOD_noise_get_ex, "TCOD_noise_get_ex");
            bindFunc(cast(void**)&TCOD_noise_get_fbm_ex, "TCOD_noise_get_fbm_ex");
            bindFunc(cast(void**)&TCOD_noise_get_turbulence_ex, "TCOD_noise_get_turbulence_ex");
            bindFunc(cast(void**)&TCOD_noise_get, "TCOD_noise_get");
            bindFunc(cast(void**)&TCOD_noise_get_fbm, "TCOD_noise_get_fbm");
            bindFunc(cast(void**)&TCOD_noise_get_turbulence, "TCOD_noise_get_turbulence");
            bindFunc(cast(void**)&TCOD_noise_delete, "TCOD_noise_delete");
            // parser.h
            bindFunc(cast(void**)&TCOD_parser_new, "TCOD_parser_new");
            bindFunc(cast(void**)&TCOD_parser_new_struct, "TCOD_parser_new_struct");
            bindFunc(cast(void**)&TCOD_parser_run, "TCOD_parser_run");
            bindFunc(cast(void**)&TCOD_parser_delete, "TCOD_parser_delete");
            bindFunc(cast(void**)&TCOD_parser_error, "TCOD_parser_error");
            bindFunc(cast(void**)&TCOD_parser_get_bool_property, "TCOD_parser_get_bool_property");
            bindFunc(cast(void**)&TCOD_parser_get_char_property, "TCOD_parser_get_char_property");
            bindFunc(cast(void**)&TCOD_parser_get_int_property, "TCOD_parser_get_int_property");
            bindFunc(cast(void**)&TCOD_parser_get_float_property, "TCOD_parser_get_float_property");
            bindFunc(cast(void**)&TCOD_parser_get_string_property, "TCOD_parser_get_string_property");
            bindFunc(cast(void**)&TCOD_parser_get_color_property, "TCOD_parser_get_color_property");
            bindFunc(cast(void**)&TCOD_parser_get_dice_property, "TCOD_parser_get_dice_property");
            bindFunc(cast(void**)&TCOD_parser_get_dice_property_py, "TCOD_parser_get_dice_property_py");
            bindFunc(cast(void**)&TCOD_parser_get_custom_property, "TCOD_parser_get_custom_property");
            bindFunc(cast(void**)&TCOD_parser_get_list_property, "TCOD_parser_get_list_property");
            // path.h
            bindFunc(cast(void**)&TCOD_path_new_using_map, "TCOD_path_new_using_map");
            bindFunc(cast(void**)&TCOD_path_new_using_function, "TCOD_path_new_using_function");
            bindFunc(cast(void**)&TCOD_path_compute, "TCOD_path_compute");
            bindFunc(cast(void**)&TCOD_path_walk, "TCOD_path_walk");
            bindFunc(cast(void**)&TCOD_path_is_empty, "TCOD_path_is_empty");
            bindFunc(cast(void**)&TCOD_path_size, "TCOD_path_size");
            bindFunc(cast(void**)&TCOD_path_reverse, "TCOD_path_reverse");
            bindFunc(cast(void**)&TCOD_path_get, "TCOD_path_get");
            bindFunc(cast(void**)&TCOD_path_get_origin, "TCOD_path_get_origin");
            bindFunc(cast(void**)&TCOD_path_get_destination, "TCOD_path_get_destination");
            bindFunc(cast(void**)&TCOD_path_delete, "TCOD_path_delete");
            bindFunc(cast(void**)&TCOD_dijkstra_new, "TCOD_dijkstra_new");
            bindFunc(cast(void**)&TCOD_dijkstra_new_using_function, "TCOD_dijkstra_new_using_function");
            bindFunc(cast(void**)&TCOD_dijkstra_compute, "TCOD_dijkstra_compute");
            bindFunc(cast(void**)&TCOD_dijkstra_get_distance, "TCOD_dijkstra_get_distance");
            bindFunc(cast(void**)&TCOD_dijkstra_path_set, "TCOD_dijkstra_path_set");
            bindFunc(cast(void**)&TCOD_dijkstra_is_empty, "TCOD_dijkstra_is_empty");
            bindFunc(cast(void**)&TCOD_dijkstra_size, "TCOD_dijkstra_size");
            bindFunc(cast(void**)&TCOD_dijkstra_reverse, "TCOD_dijkstra_reverse");
            bindFunc(cast(void**)&TCOD_dijkstra_get, "TCOD_dijkstra_get");
            bindFunc(cast(void**)&TCOD_dijkstra_path_walk, "TCOD_dijkstra_path_walk");
            bindFunc(cast(void**)&TCOD_dijkstra_delete, "TCOD_dijkstra_delete");
            // sys.h
            bindFunc(cast(void**)&TCOD_sys_elapsed_milli, "TCOD_sys_elapsed_milli");
            bindFunc(cast(void**)&TCOD_sys_elapsed_seconds, "TCOD_sys_elapsed_seconds");
            bindFunc(cast(void**)&TCOD_sys_sleep_milli, "TCOD_sys_sleep_milli");
            bindFunc(cast(void**)&TCOD_sys_save_screenshot, "TCOD_sys_save_screenshot");
            bindFunc(cast(void**)&TCOD_sys_force_fullscreen_resolution, "TCOD_sys_force_fullscreen_resolution");
            bindFunc(cast(void**)&TCOD_sys_set_renderer, "TCOD_sys_set_renderer");
            bindFunc(cast(void**)&TCOD_sys_get_renderer, "TCOD_sys_get_renderer");
            bindFunc(cast(void**)&TCOD_sys_set_fps, "TCOD_sys_set_fps");
            bindFunc(cast(void**)&TCOD_sys_get_fps, "TCOD_sys_get_fps");
            bindFunc(cast(void**)&TCOD_sys_get_last_frame_length, "TCOD_sys_get_last_frame_length");
            bindFunc(cast(void**)&TCOD_sys_get_current_resolution, "TCOD_sys_get_current_resolution");
            bindFunc(cast(void**)&TCOD_sys_get_fullscreen_offsets, "TCOD_sys_get_fullscreen_offsets");
            bindFunc(cast(void**)&TCOD_sys_update_char, "TCOD_sys_update_char");
            bindFunc(cast(void**)&TCOD_sys_get_char_size, "TCOD_sys_get_char_size");
            // bindFunc(cast(void**)&TCOD_sys_get_sdl_window, "TCOD_sys_get_sdl_window");
            bindFunc(cast(void**)&TCOD_sys_wait_for_event, "TCOD_sys_wait_for_event");
            bindFunc(cast(void**)&TCOD_sys_check_for_event, "TCOD_sys_check_for_event");
            bindFunc(cast(void**)&TCOD_sys_create_directory, "TCOD_sys_create_directory");
            bindFunc(cast(void**)&TCOD_sys_delete_file, "TCOD_sys_delete_file");
            bindFunc(cast(void**)&TCOD_sys_delete_directory, "TCOD_sys_delete_directory");
            bindFunc(cast(void**)&TCOD_sys_is_directory, "TCOD_sys_is_directory");
            bindFunc(cast(void**)&TCOD_sys_get_directory_content, "TCOD_sys_get_directory_content");
            bindFunc(cast(void**)&TCOD_sys_file_exists, "TCOD_sys_file_exists");
            bindFunc(cast(void**)&TCOD_sys_read_file, "TCOD_sys_read_file");
            bindFunc(cast(void**)&TCOD_sys_write_file, "TCOD_sys_write_file");
            bindFunc(cast(void**)&TCOD_sys_clipboard_set, "TCOD_sys_clipboard_set");
            bindFunc(cast(void**)&TCOD_sys_clipboard_get, "TCOD_sys_clipboard_get");
            bindFunc(cast(void**)&TCOD_thread_new, "TCOD_thread_new");
            bindFunc(cast(void**)&TCOD_thread_delete, "TCOD_thread_delete");
            bindFunc(cast(void**)&TCOD_sys_get_num_cores, "TCOD_sys_get_num_cores");
            bindFunc(cast(void**)&TCOD_thread_wait, "TCOD_thread_wait");
            bindFunc(cast(void**)&TCOD_mutex_new, "TCOD_mutex_new");
            bindFunc(cast(void**)&TCOD_mutex_in, "TCOD_mutex_in");
            bindFunc(cast(void**)&TCOD_mutex_out, "TCOD_mutex_out");
            bindFunc(cast(void**)&TCOD_mutex_delete, "TCOD_mutex_delete");
            bindFunc(cast(void**)&TCOD_semaphore_new, "TCOD_semaphore_new");
            bindFunc(cast(void**)&TCOD_semaphore_lock, "TCOD_semaphore_lock");
            bindFunc(cast(void**)&TCOD_semaphore_unlock, "TCOD_semaphore_unlock");
            bindFunc(cast(void**)&TCOD_semaphore_delete, "TCOD_semaphore_delete");
            bindFunc(cast(void**)&TCOD_condition_new, "TCOD_condition_new");
            bindFunc(cast(void**)&TCOD_condition_signal, "TCOD_condition_signal");
            bindFunc(cast(void**)&TCOD_condition_broadcast, "TCOD_condition_broadcast");
            bindFunc(cast(void**)&TCOD_condition_wait, "TCOD_condition_wait");
            bindFunc(cast(void**)&TCOD_condition_delete, "TCOD_condition_delete");
            bindFunc(cast(void**)&TCOD_load_library, "TCOD_load_library");
            bindFunc(cast(void**)&TCOD_get_function_address, "TCOD_get_function_address");
            bindFunc(cast(void**)&TCOD_close_library, "TCOD_close_library");
            bindFunc(cast(void**)&TCOD_sys_register_SDL_renderer, "TCOD_sys_register_SDL_renderer");
            // text.h
            bindFunc(cast(void**)&TCOD_tree_new, "TCOD_tree_new");
            bindFunc(cast(void**)&TCOD_tree_add_son, "TCOD_tree_add_son");
            // txtfield.h
            bindFunc(cast(void**)&TCOD_text_init, "TCOD_text_init");
            bindFunc(cast(void**)&TCOD_text_set_properties, "TCOD_text_set_properties");
            bindFunc(cast(void**)&TCOD_text_set_colors, "TCOD_text_set_colors");
            bindFunc(cast(void**)&TCOD_text_update, "TCOD_text_update");
            bindFunc(cast(void**)&TCOD_text_render, "TCOD_text_render");
            bindFunc(cast(void**)&TCOD_text_get, "TCOD_text_get");
            bindFunc(cast(void**)&TCOD_text_reset, "TCOD_text_reset");
            bindFunc(cast(void**)&TCOD_text_delete, "TCOD_text_delete");
            // zip.h
            bindFunc(cast(void**)&TCOD_zip_new, "TCOD_zip_new");
            bindFunc(cast(void**)&TCOD_zip_delete, "TCOD_zip_delete");
            bindFunc(cast(void**)&TCOD_zip_put_char, "TCOD_zip_put_char");
            bindFunc(cast(void**)&TCOD_zip_put_int, "TCOD_zip_put_int");
            bindFunc(cast(void**)&TCOD_zip_put_float, "TCOD_zip_put_float");
            bindFunc(cast(void**)&TCOD_zip_put_string, "TCOD_zip_put_string");
            bindFunc(cast(void**)&TCOD_zip_put_color, "TCOD_zip_put_color");
            bindFunc(cast(void**)&TCOD_zip_put_image, "TCOD_zip_put_image");
            bindFunc(cast(void**)&TCOD_zip_put_console, "TCOD_zip_put_console");
            bindFunc(cast(void**)&TCOD_zip_put_data, "TCOD_zip_put_data");
            bindFunc(cast(void**)&TCOD_zip_get_current_bytes, "TCOD_zip_get_current_bytes");
            bindFunc(cast(void**)&TCOD_zip_save_to_file, "TCOD_zip_save_to_file");
            bindFunc(cast(void**)&TCOD_zip_load_from_file, "TCOD_zip_load_from_file");
            bindFunc(cast(void**)&TCOD_zip_get_char, "TCOD_zip_get_char");
            bindFunc(cast(void**)&TCOD_zip_get_int, "TCOD_zip_get_int");
            bindFunc(cast(void**)&TCOD_zip_get_float, "TCOD_zip_get_float");
            bindFunc(cast(void**)&TCOD_zip_get_string, "TCOD_zip_get_string");
            bindFunc(cast(void**)&TCOD_zip_get_color, "TCOD_zip_get_color");
            bindFunc(cast(void**)&TCOD_zip_get_image, "TCOD_zip_get_image");
            bindFunc(cast(void**)&TCOD_zip_get_console, "TCOD_zip_get_console");
            bindFunc(cast(void**)&TCOD_zip_get_data, "TCOD_zip_get_data");
            bindFunc(cast(void**)&TCOD_zip_get_remaining_bytes, "TCOD_zip_get_remaining_bytes");
            bindFunc(cast(void**)&TCOD_zip_skip_bytes, "TCOD_zip_skip_bytes");
        }
    }

    public
    {
        this()
        {
            super(libNames);
        }
    }
}

__gshared DerelictTCODLoader DerelictTCOD;

shared static this()
{
    DerelictTCOD = new DerelictTCODLoader();
}

shared static ~this()
{
    DerelictTCOD.unload();
}
